﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using SistemaLib.Gestores;
using Coolite.Ext.Web;
using Coolite.Utilities;
using SistemaLib.Entidades;

namespace SistemaWeb.Paginas
{
    public partial class ListaTareas : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Ext.IsAjaxRequest)
            {
                CargarCombos();
                RefrescarGrilla(1);
            }

            EdTarea.SeModificoEntidad += new EventHandler(EdTarea_SeModificoEntidad);

            if (Request["allow"] != null)
            {
                if (Request["allow"].ToString() == "false")
                {
                    Perfil p = (Perfil)Session["perfil"];
                    
                    Ext.Msg.Show(new MessageBox.Config
                    {
                        Title = "Permisos Insuficientes",
                        Message = String.Format("Los usuarios con perfil '{0}' no pueden acceder a esta sección. Solicite que se le habiliten los permisos correspondientes.", p.Descripcion),
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.WARNING
                    });
                }
            }
        }

        public void CargarCombos()
        {
            storeProyecto.DataSource = GestorProyecto.ListarProyectos();
            storeProyecto.DataBind();
        }

        protected void cboProyecto_ItemSelected(object sender, EventArgs e)
        {
            int idProy = int.Parse(cboProyecto.SelectedItem.Value);
            RefrescarGrilla(idProy);
        }

        public void EdTarea_SeModificoEntidad(object sender, EventArgs e)
        {
            int idProy = int.Parse(cboProyecto.SelectedItem.Value);
            RefrescarGrilla(idProy);
        }

        
        public void RefrescarGrilla(int idProyecto)
        {
            Recurso rh = (Recurso)Session["user"];
            
            if(rh.IdPerfil == Perfil.ADMIN || rh.IdPerfil == Perfil.PM)
                Store1.DataSource = GestorTareas.ListarTareas(idProyecto);   //Lista todas las tareas si es Admin o PM
            else
                Store1.DataSource = GestorTareas.ListarTareas(rh.Id, idProyecto);  //Lista las tareas del recurso      
            
            Store1.DataBind();
        }
       
        [AjaxMethod]
        public void RowSelect(object sender, AjaxEventArgs e)
        {
            int id = int.Parse(e.ExtraParams["ID"]);
            TareaToShow tar = GestorTareas.CargarTareaToShow(id);

            idTB.Text = tar.Id.ToString();
            nombreTB.Text = tar.Nombre;
            descripcionTB.Text = tar.Descripcion;
            prioridadTB.Text = tar.Prioridad;
            tipoTB.Text = tar.Tipo;
            complejidadTB.Text = tar.Complejidad;
            estadoTB.Text = tar.Estado;
            perfilTB.Text = tar.PerfilRequerido;
            seniorityTB.Text = tar.SeniorityRequerido;
            fechaCreacionTB.SelectedDate = tar.fechaCreacion;
        }

        [AjaxMethod]
        public void CargarPopupEditor(string id)
        {            
            int idTarea = int.Parse(id);
            EdTarea.CargarCombos();
            EdTarea.CargarTarea(idTarea);
        }

        [AjaxMethod]
        public void CargarPopupAsignacion(string id)
        {            
            int idTarea = int.Parse(id);
            EdAsignacionTarea.CargarCampos(idTarea);           
        }

        [AjaxMethod]
        public void CargarPopupEstimacion(string id)
        {            
            int idTarea = int.Parse(id);
            EdEstimaciones.CargarCampos(idTarea);            
        }

        [AjaxMethod]
        public void CargarPopupLogueoHoras(string id)
        {           
            int idTarea = int.Parse(id);
            EdLogueoHoras.CargarCampos(idTarea);            
        }
        
        [AjaxMethod]
        public void EliminarTarea(string id)
        {   
            int idTarea = int.Parse(id);

            if (GestorTareaAsignacion.TareaTieneAsignaciones(idTarea))
            {
                Ext.Msg.Show(new MessageBox.Config
                {
                    Title = "Imposible de Eliminar",
                    Message = "La tarea que intenta eliminar tiene recursos asignados, y ya existen calendarios programados para esta tarea. Primero deberia elimanar todas las dependencias.",
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.WARNING
                });
            }
            else
            {
                int idProy = int.Parse(cboProyecto.SelectedItem.Value);
                GestorTareas.Eliminar(idTarea);
                RefrescarGrilla(idProy);
            }
        }
        
        
    }
}
